<?php    
    
    require_once('classes/SessionManager.class.php');    
    require_once('classes/db/SQLiteConnector.class.php');    
    require_once('classes/LeproUser.class.php');
    require_once('classes/db/LeproUserDAO.class.php');
    require_once('classes/LeproHelper.class.php');
    require_once('classes/BJStrings.class.php');
    
    //SessionManager::startSession();    

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <meta name="generator" content="PSPad editor, www.pspad.com; HTML-Kit, http://www.chami.com/html-kit/" />
  <title>Leprosorium BlackJack</title>
  <link rel="shortcut icon" href="./img/favicon.png" />
  <link href="stats.css" rel="stylesheet" type="text/css"/>  
  <link href="blackjack.css" rel="stylesheet" type="text/css"/>
  <script type="text/javascript" src="json2.js"></script>
  <script type="text/javascript" src="utils.js"></script>
  <script type="text/javascript" src="ui.js"></script>
  <script type="text/javascript" src="stats.js"></script>  
  <script type="text/javascript" src="blackjack.js"></script>
  </head>
  <body>
  
    <noscript>ВНИМАНИЕ: К сожалению, вся эта страница никак не может корректно работать без включенного JavaScript (и без CSS, кстати, тоже :( ). 
    Мы обязательно попытаемся поправить это в следующих версиях &mdash; но пока, пожалуйста, найдите всё же способ его включить.</noscript>    
       
    <div id="system-block">
        <span id="errOutput" class="hidden"></span>
         
        <img id="pageLoadingStatus" src="#" alt="Загрузка страницы не запущена" title="Загрука страницы" />
         
        <img id="dataLoadingStatus" src="#" alt="Загрузка данных не запущена" title="Загрука данных" />
    
        <span id="infoOutput"></span>
    </div>
    
    <a id="rules-link" href="./rules/rules.html" onclick="return !window.open(this.href)">Правила</a>
    <a id="stats-link" href="./stats.html" onclick="return !window.open(this.href)">Статистика</a>
    
    <div id="banner">
        <img src="#" id="heading-logo" alt="LeproBlackJack" title="LeproBlackJack" />
        <img src="#" id="loading-process" alt="Загружаю..." title="Процесс загрузки" class="hidden" />
    </div>    

    <?php 
        
        function show_error($errorStr) {
            echo '<script type="text/javascript">showError("'.$errorStr.'");</script>';
        };
        
        /* function fast_dirty_strarr2json($strArray) { // faster than json_encode because uses no checking for different stuff
            return '{"'.implode('","',$strArray).'"}';
        }
        
        function fast_dirty_hash2json($hashArray) { // faster than json_encode because uses no checking for different stuff
            $hashElms = '{';
            foreach ($hashArray as $key => $val) {
                $hashElms .= $key.':"'.$val.'",'; 
            }
            $hashElms .= '}';
            return $hashElms;
        } */
        
        if(!function_exists("echobig")) {
            function echobig($string, $bufferSize = 8191) { // echo variant from http://php.net/manual/en/function.echo.php#52881, #50401
                // suggest doing a test for Integer & positive bufferSize
                for ($chars=strlen($string)-1,$start=0;$start <= $chars;$start += $bufferSize) {
                    echo substr($string,$start,$bufferSize);
                }
            }
        }
        
        //show_error('test error');
    ?>               
    
         <script type="text/javascript">
            var allUsers = null;
            var bja = new BlackJackApp();
            var pageProgress = new ProgressBar('pageLoadingStatus');
            var dataProgress = new ProgressBar('dataLoadingStatus');            
         </script>
    
         <!-- <script type="text/javascript"> onPageLoadingStarted(); </script> -->
         
         <script type="text/javascript"> pageProgress.run('Загрузка страницы идёт уже ', ' секунд'); </script>
         
         <div id="content">        

         <!-- Первый этаж: Блок логина по номеру -->
         <a id="login-level" name="login-level"></a>

         <!-- <div id="login-block"> -->
                <form id="login" action="./get_data.php">
                    <!-- Ввод номера -->
                    <div id="number-act" class="actblock left">
                        <label for="lepro-number">Введите идентифицирующее вас регистрационное число #: </label>
                        <input type="text" id="lepro-number" name="regnum" onkeydown="return filterNumbers(event, this);" onkeyup="bja.checkUser(this.value);" />
                    </div>
                    <span id="number-to-check" class="step">&rarr;</span>                    
                    <!-- Проверка номера -->
                    <div id="check-act" class="actblock middle">
                        <span id="number-found">Мы вас не знаем!</span>                       
                        <img src="#" id="number-accepted" alt="Опознание номера" title="Опознание номера" class="mark" />
                    </div>                    
                    <span id="check-to-enter" class="step">&rarr;</span>
                    <!-- Кнопка "Войти" -->
                    <div id="enter-act-1" class="actblock right">
                        <label for="login-button" id="login-button-label">Войти: </label>
                        <input type="submit" id="login-button" name="login" title="arrgh" value="AARGH!" disabled="disabled" onclick="bja.tryLogin(); return false;" />
                    </div>
                </form>
                <form id="enter-act-2" action="./enter.php" class="actblock right">
                     <span>Теперь нам нужно вас опознать:</span>
                     <label for="password">Здесь введите пароль: </label>
                     <input type="password" id="password" name="pwd" disabled="disabled" onkeyup="return checkPwd(event, this);" />
                     <span id="pass-help-label">(обязательно запомните его, восстановлению не подлежит; и да &mdash; только цифры и буквы)</span>
                     <label for="re-password">Таки ещё раз, пожалуйста: </label>
                     <input type="password" id="re-password" name="rpwd" disabled="disabled" onkeyup="return checkPwd(event, this);" />
                     <label for="email">Ваше электронне мыло (необязательно): </label>
                     <input type="text" id="email" name="email" disabled="disabled" onkeyup="return checkEmail(event, this);" />
                     <img src="#" id="captcha" alt="Капча (кликните для увеличения)" title="Капча, дабы выяснить, робот вы или человек (кликните для увеличения)" class="inactive" onclick="bja.enlargeCaptcha(this);" onmouseover="this.style.cursor = 'pointer';" onmouseout="this.style.cursor = 'default';" />
                     <label for="user-captcha">Введите текст с попорченной картинки: </label>
                     <input type="text" id="user-captcha" name="captcha" disabled="disabled"  onkeyup="return checkCaptcha(event, this);" />
                     <input type="hidden" id="logincode" name="logincode" value="" disabled="disabled" />  
                     <input type="submit" id="enter-button" name="accept" title="accept" value="Willkommen ->" disabled="disabled" onclick="bja.tryEnter(); return false;" />
                </form>   
                <div id="enter-act-3" class="actblock right">
                    <span id="enter-err-result"></span>                    
                    <img src="#" id="account-accepted" alt="Проверка аккаунта" title="Проверка аккаунта" class="mark" />
                    <div id="user-info"></div>
                    <label for="enter-cont-button" id="enter-cont-label">Продолжить: </label>
                    <input type="submit" id="enter-cont-button" name="retry" title="<-" value="&larr;" disabled="disabled" onclick="bja.retryEnter(); return false;" />                    
                </div>          
                <!-- / -->
                <span id="enter-to-card" class="step">&rarr;</span>             
         <!-- </div>  -->
         
         <!-- Второй этаж: Блок регистрации/входа и выдачи/подтверждения карты -->
         <a id="card-level" name="card-level"></a>
         
         <!-- <div id="card-block"> -->
            <span id="enter-to-card-nl" class="step">&rarr;</span>
            <!-- Выдача карты -->             
            <div id="card-act" class="actblock left">
                <span>Вот такая вам сдана карта:</span>
                <img src="#" id="card-img" alt="Карта" title="Карта" />
            </div>
            <span id="card-to-approve" class="step">&rarr;</span>            
            <!-- Подтверждение карты -->
            <div id="approve-act-1" class="actblock middle">
                <label for="card-code">Код для вставки в профиль:</label>                
                <!-- <textarea id="card-code" name="card-profile-code" disabled="disabled" rows="5" cols="20"></textarea> -->
                <div id="card-code"></div>
                <span>или краткий вариант:</span>
                <!-- <textarea id="card-scode" name="card-profile-short-code" disabled="disabled" rows="5" cols="20"></textarea> -->
                <div id="card-scode"></div>
                <input type="submit" id="check-profile-button" name="check" title="Проверить" value="Провериться" disabled="disabled" onclick="bja.tryRegister(); return false;" />
            </div>                            
            <div id="approve-act-2" class="actblock middle">
                <span id="approve-err-result"></span> 
                <img src="#" id="card-accepted" alt="Размещение карты в профиле" title="Размещение карты в профиле"  class="mark" />
                <input type="submit" id="recheck-profile-button" name="recheck" title="<-" value="&larr;" disabled="disabled" onclick="bja.retryCheck(); return false;" />
            </div>
            <!-- Вывод количества очков -->         
            <span id="approve-to-score" class="step">&rarr;</span>
            <div id="score-act" class="actblock right">
                <span id="score-label">Кстати, численно карта эквивалента этому значению:</span>
                <span id="score-num">x</span>
            </div>
            <span id="score-to-group" class="step">&rarr;</span>                
         <!-- </div>  -->
         
         <!-- Третий этаж: Блок создания/вступления/выхода из группы -->
         <a id="groups-level" name="groups-level"></a>
         
         <!-- <div id="groups-block">  -->            
            <span id="score-to-group-nl" class="step">&rarr;</span>
            <!-- Выбор группы -->
            <div id="group-act" class="actblock left">
                <!-- TODO: Картинки для текущей группы: войти/выйти/создать группу (название вставляется автоматически или вводится) -->
                <form id="group-act-choose">              
                    <label for="group-name">Введите номер группы (или оставьте поле пустым для создания): </label>
                    <input type="text" id="group-name" name="gname" disabled="disabled"  onkeydown="return filterNumberis(event, this);" onkeyup="bja.checkGroup(this.value);" />
                </form>
            </div>
            <span id="group-to-operation" class="step">&rarr;</span>
            <!-- Настройка кода группы -->
            <div id="operation-act" class="actblock middle">
                <span id="group-act-label">Создать группу</span>
                 <img src="#" id="confirm-action" alt="Действие над группой" title="Действие над группой" class="mark" />
            </div>
            <span id="operation-to-confirm" class="step">&rarr;</span>
            <!-- Подтверждение действия -->            
            <div id="confirm-act-1" class="actblock right">        
                <label for="confirm-act-button" id="confirm-button-label">Создать: </label>
                <input type="hidden" id="action-type" name="acttype" disabled="disabled" />        
                <input type="submit" id="confirm-act-button" name="groupact" title="Confirm Action" value="Yep!" disabled="disabled" onclick="bja.tryGroupAction(); return false;" />
            </div>
            <div id="confirm-act-2" class="actblock right">
                 <!-- Ввод кода группы --> 
                 <form id="group-code-manage">
                    <label for="group-code" id="group-code-label">Введите код для группы :</label>
                    <input type="text" id="group-code" name="gcode" disabled="disabled" />
                    <span id="empty-code-label">(или оставьте код пустым, если он вам не сдался)</span>
                    <span id="letters-code-label">(кстати, только латиница и цифры!)</span>
                    <input type="submit" id="code-entered" name="saveсode" title="Save code" value="YARR! ->" onclick="bja.useGroupCode(); return false;" disabled="disabled" />
                    <input type="submit" id="reenter-gname" name="regname" title="Reenter group name" value="<- Вернуться" onclick="bja.reEnterGname(); return false;" disabled="disabled" />
                 </form>
            </div>            
            <!-- Результат действия -->            
            <div id="confirm-act-3" class="actblock right">
                <span id="confirm-err-result"></span>                    
                <img src="#" id="group-act-result" alt="Результат операции" title="Выполнение операции" class="mark" />
                <div id="group-info"></div>
                <label for="return-to-gname" id="return-gname-label">Продолжить: </label>
                <input type="submit" id="return-to-gname" name="return-gname" title="Return to group selection" value="<- Вернуться" onclick="bja.updateGroups(); return false;" disabled="disabled" />                
                <!-- 
                <label for="confirm-cont-button" id="confirm-cont-label">Продолжить: </label>
                <input type="submit" id="enter-cont-button" name="retry" title="<-" value="&larr;" disabled="disabled" onclick="bja.retryEnter(); return false;" />                            
                <img src="#" id="group-act-result" alt="Операция неудачна" title="Результат операции" class="mark" />
                -->
            </div>        
         <!-- </div> -->
         
         <!-- Переключение режимов 21/БлекДжек -->

         <!-- <div id="modes-switch" class="actblock centered">         
              <input type="checkbox" id="21-mode-switch" name="21-mode" title="Entered" value="Done!" disabled="disabled" />
              <noscript><input type="submit" id="switch-mode" name="modeswitch" title="Switch Mode" value="Switch! ->" /></noscript>
         </div> -->
         
         <!-- Сводные таблицы -->
         <a id="tables-level" name="tables-level"></a>
         
         <!-- Группы пользователя -->
         
         <div id="info-card"></div>
         
         <div id="floating-info" style="display: none;"></div>
         
         <div id="tables" class="stats centered">
         
         <span id="refresh-span" onclick="bja._loadGroupsInfo();">Обновить</span>         
         
         <div id="info-form">
            <div id="info-box">
                <img src="./img/type-unknown.png" id="info-type-img" alt="Класс информации" title="Класс информации" />
                <div id="info-content"></div>
            </div>            
            <form id="info-loader">
                <input type="text" id="info-for" name="infofor" disabled="disabled" />
                    <table id="info-type-radios">
                        <tbody>
                            <tr>
                                <td><input type="radio" name="info-type" id="info-type-username" value="username" selected="selected" disabled="disabled" /></td><td><label for="info-type-username">Пользователь, имя</label></td>
                            </tr><tr>
                                <td><input type="radio" name="info-type" id="info-type-user" value="user" disabled="disabled" /></td><td><label for="info-type-user">Пользователь, номер</label></td>
                            </tr><tr>
                                <td><input type="radio" name="info-type" id="info-type-group" value="group" disabled="disabled" /></td><td><label for="info-type-group">Группа, номер</label></td>
                            </tr>
                        </tbody>
                    </table>
                <input type="submit" id="get-info-for" name="return-gname" title="Get information for" value="Что там?" onclick="bja.tryToGetInfo(); return false;" disabled="disabled" />
            </form>            
         </div>
         
         <table id="user-groups" summary="Содержит список групп, в которых находится пользователь и обеспечивает возможность выхода из групп.">
              <caption>Группы, в которых вы учавствуете:</caption>
              <thead>
                  <tr>
                      <th>Группа</th>
                      <th>Участники</th>
                      <th>Карты</th>
                      <th>Сумма очков</th>
                      <th>&minus;</th>
                  </tr>
              </thead>
              <tbody>
                  <tr>
                      <td>-</td>
                      <td>-</td>
                      <td>-</td>
                      <td>-</td>
                      <td>-</td>
                  </tr>                
              </tbody>
         </table>                  
         
         <!-- new line -->
         
         <!-- Все группы -->
         
         <table id="all-groups" summary="Все группы, отсортированные по очкам, отсутвию джокеров и количеству пользователей. В группы можно вступить или их покинуть.">
              <caption>Все группы:</caption>
              <thead>
                  <tr>
                      <th>Группа</th>
                      <th>Участники</th>
                      <th>Карты</th>
                      <th>Сумма очков</th>
                      <th>+</th>
                      <th>&minus;</th>
                  </tr>
              </thead>
              <tbody>
                  <tr>
                      <td>-</td>
                      <td>-</td>
                      <td>-</td>
                      <td>-</td>
                      <td>-</td>
                      <td>-</td>
                  </tr>                
              </tbody>       
         </table>
         
         <table id="all-users" summary="Все пользователи, упорядоченные по количеству завершённых групп, в которые они входят и по очкам.">
              <caption>Все участники:</caption>
              <thead>
                  <tr>
                      <th>Имя</th>
                      <th>Карта</th>
                      <th>Очки</th>
                      <th>Кол-во групп</th>
                  </tr>
              </thead>
              <tbody>
                  <tr>
                      <td>-</td>
                      <td>-</td>
                      <td>-</td>
                      <td>-</td>
                  </tr>                
              </tbody>       
         </table>   
         
        </div> <!-- #tables -->
        
        </div> <!-- #content -->
        
        <span id="copyright">
            <a href="http://leprosorium.ru">thanks for mask and panda</a>; 
            <a href="http://david.bellot.free.fr/svg-cards/">thanks for cards</a>; 
            &copy; 2008, Pepyaka Software Reserach; 
            &copy; 2008, designed and developed by 
                <a href="http://leprosorium.ru/users/15140">zokotuhaFly</a> a.k.a 
                <a href="http://shamansir.wordpress.com">shaman.sir</a> 
                [<a href="mailto:shaman.sir@gmail.com">e-mail</a>];
        </span>
         
        <!-- <script type="text/javascript"> onPageLoadingFinished(); checkUser(); </script> -->
        
        <script type="text/javascript"> pageProgress.finish('Загрузка страницы окончена и заняла ', ' секунд'); </script>
        
        <script type="text/javascript"> bja.initializeElems(); bja.initializeLoginStage(); bja.checkUser(); </script>
    
        <!-- <script type="text/javascript"> onDataLoadingStarted(); </script> -->  
        
        <script type="text/javascript"> dataProgress.run('Загрузка данных идёт уже ', ' секунд'); </script>  
         
    <?php
    
        function userIdConvertor($internalId) {
            return LeproHelper::getExternalUserId($internalId, '.');
        }
    
        $connector = SQLiteConnector::getInstance();
        if ($connector->connect()) {            
            $userDAO = new LeproUserDAO($connector->getDB());
            
            /* filling with test data */ /*
            // $userDAO->deleteAllUsers();
            srand();
            echo 'started saving: '.date(DATE_RFC822).'; ';
            for ($i = 1; $i <= 2000; $i++) {                
                $cardId = dechex(rand(2, 15)).'h';
                $user = new LeproUser(rand(1,25000), "userWithCard".$cardId);
                $user->setCardID($cardId);
                echo 'prepared to save user '.$i.'; ';           
                $userDAO->save($user);
                echo 'saved user '.$i.'; ';
            }
            echo 'finished saving: '.date(DATE_RFC822).'; ';
            */ 
            
            // echo $userDAO->getCount();
            
            $allUsersJSON = json_encode($userDAO->getIdsNamesPairs(true, userIdConvertor)); // works a little slow
            echo '<script type="text/javascript">'.
                    // 'var allUsers = '.$allUsersJSON.';'.
                    'allUsers = '; echobig($allUsersJSON); echo ';'.
                    'bja.checkUser();'.            
                 '</script>';
                                   
                        
        } else { 
            show_error(BJStrings::$DB_CONNECTION_ERROR_STR); 
        }
        
        // SessionManager::destroySession();
    
    ?>
    
    <!-- <script type="text/javascript"> onDataLoadingFinished(); </script> -->
    
    <script type="text/javascript"> dataProgress.finish('Загрузка данных окончена и заняла ', ' секунд'); </script>      
         
  </body>
</html>
